package com.bcx.crm.plat.util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * Created by ys on 2018/3/28.
 */
public class PinYinConvert {
    /**
     * 对传递进来的值，将汉字地方转换为拼音
     * @param value 传递进来的值，有可能包含拼音也有可能不包含拼音
     * @return 有汉字的地方变成了拼音的 value
     */
    public static String getPinYin(String value){
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        char [] charValue = value.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (char charV:charValue){
            stringBuilder.append(convertPinYin(charV,format));
        }
        return stringBuilder.toString();
    }

    /**
     * 对char类型的值，是汉字就返回汉字对应的拼音，不是汉字就原封不动的返回出去
     * @param value 传递的char类型值
     * @param format 汉语转拼音的类
     * @return 返回汉语拼音 或 非汉语原型
     */
    private static String convertPinYin(char value , HanyuPinyinOutputFormat format){
        String charS = String.valueOf(value);
        if (charS.matches("[\\u4e00-\\u9fa5]")){
            try {
                return PinyinHelper.toHanyuPinyinStringArray(value, format)[0];
            } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                throw new IllegalStateException("转换拼音失败");
            }
        }
        return charS;
    }
}
